package com.bt.lms.ui.page.sys.style;

import com.bt.lms.ui.page.sys.style.action.PagingBtnCurrentExitedAction;
import com.bt.lms.ui.page.sys.style.action.PagingBtnCurrentMouseAction;
import com.bt.lms.ui.page.sys.style.action.btn.*;
import javafx.scene.control.Button;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;

/**
 * 按钮样式方法
 */
public class BtnStyle {

    /**
     * 固定弧度
     */
    public final static CornerRadii CORNER_RADII = new CornerRadii(8);

    /**
     * 固定弧度
     */
    public final static CornerRadii PAGING_CORNER_RADII = new CornerRadii(4);

    /**
     * 按钮渐变背景色
     *
     * @param button  按钮
     * @param color   渐变色（上方）
     * @param toColor 渐变色（下方）
     */
    public static void gradualChangeBack(Button button, Color color, Color toColor) {

        //可以渐变的颜色（0-1）
        Stop[] stops = new Stop[]{
                new Stop(0, color), new Stop(1, toColor)};

        //渐变颜色（0-1变化）
        LinearGradient linear = new LinearGradient(
                0, 0, 0, 1, true,
                CycleMethod.NO_CYCLE, stops);

        //按钮背景色
        BackgroundFill backgroundFill = new BackgroundFill(linear, PAGING_CORNER_RADII, null);
        Background background = new Background(backgroundFill);
        button.setBackground(background);
    }

    /**
     * 普通按钮边框
     *
     * @param cancelBtn 按钮
     * @param stroke    边框颜色
     */
    public static void btnBorder(Button cancelBtn, Color stroke) {

        //边框
        BorderStroke borderStroke = new BorderStroke(stroke,
                BorderStrokeStyle.SOLID, PAGING_CORNER_RADII, new BorderWidths(1));
        Border border = new Border(borderStroke);
        cancelBtn.setBorder(border);
    }

    /**
     * 新增按钮样式
     * @param button 按钮
     */
    public static void addBtn(Button button) {

        //背景色
        Color color = Color.rgb(99, 211, 248);
        Color toColor = Color.rgb(10, 167, 213);
        addBtnBackground(button, color, toColor);

        //字体颜色
        addBtnTextColor(button);

        //边框
        addBtnBorder(button);

    }

    /**
     * 添加按钮背景色
     * 渐变色
     * 圆角
     *
     * @param button  添加按钮
     * @param color   渐变色（上方）
     * @param toColor 渐变色（下方）
     */
    public static void addBtnBackground(Button button, Color color, Color toColor) {

        //可以渐变的颜色（0-1）
        Stop[] stops = new Stop[]{
                new Stop(0, color), new Stop(1, toColor)};

        //渐变颜色（0-1变化）
        LinearGradient linear = new LinearGradient(
                0, 0, 0, 1, true,
                CycleMethod.NO_CYCLE, stops);

        //按钮背景色
        BackgroundFill backgroundFill = new BackgroundFill(linear, CORNER_RADII, null);
        Background background = new Background(backgroundFill);
        button.setBackground(background);
    }

    /**
     * 添加按钮的事件
     *
     * @param button 按钮
     */
    public static void addBtnAction(Button button) {

        //鼠标移入颜色变深（事件）
        AddBtnMouseAction addBtnMovedAction = new AddBtnMouseAction(button);
        button.setOnMouseMoved(addBtnMovedAction);

        //鼠标移出颜色变浅（事件）
        AddBtnExitedAction addBtnExitedAction = new AddBtnExitedAction(button);
        button.setOnMouseExited(addBtnExitedAction);

        //鼠标按下事件（颜色深）
        AddBtnPressedAction addBtnPressedAction = new AddBtnPressedAction(button);
        button.setOnMousePressed(addBtnPressedAction);

        //鼠标释放事件
        AddBtnReleasedAction addBtnReleasedAction = new AddBtnReleasedAction(button);
        button.setOnMouseReleased(addBtnReleasedAction);
    }

    /**
     * 分页按钮样式
     * 普通
     *
     * @param button 按钮
     */
    public static void paging(Button button) {

        //背景色
        Color backgroundRgb = Color.rgb(255, 255, 255);
        pagingBtnBackground(button, backgroundRgb);

        //字体颜色
        pagingBtnTextColor(button);

        //边框
        Color borderRgb = Color.rgb(221, 221, 221);
        pagingBtnBorder(button, borderRgb);

    }

    /**
     * 分页按钮样式（当前）
     *
     * @param button 按钮
     */
    public static void pagingCurrent(Button button) {

        //渐变背景
        gradualChangeBack(button, Color.rgb(160, 206, 66), Color.rgb(72, 149, 0));

        //字体颜色
        Color rgb = Color.rgb(255, 255, 255);
        button.setTextFill(rgb);

        //边框
        pagingBtnBorder(button);

    }

    /**
     * 分页按钮事件
     *
     * @param button 按钮
     */
    public static void pagingAction(Button button) {

        //鼠标移入
        PagingBtnMouseAction pagingMouseAction = new PagingBtnMouseAction(button);
        button.setOnMouseMoved(pagingMouseAction);

        //鼠标移出
        PagingBtnExitedAction pagingExitedAction = new PagingBtnExitedAction(button);
        button.setOnMouseExited(pagingExitedAction);

    }

    /**
     * 分页按钮事件（当前）
     *
     * @param button 按钮
     */
    public static void pagingCurrentAction(Button button) {

        //鼠标移入
        PagingBtnCurrentMouseAction pagingBtnCurrentMouseAction = new PagingBtnCurrentMouseAction(button);
        button.setOnMouseMoved(pagingBtnCurrentMouseAction);

        //鼠标移出
        PagingBtnCurrentExitedAction pagingBtnCurrentExitedAction = new PagingBtnCurrentExitedAction(button);
        button.setOnMouseExited(pagingBtnCurrentExitedAction);
    }

//    /**
//     * 交互样式
//     *
//     * @param button 按钮（暂时未实现）
//     */
//    public static void interaction(Button button) {
//
//
//    }

    /**
     * 保存按钮样式
     *
     * @param saveBtn 保存按钮
     */
    public static void saveBtn(Button saveBtn) {

        //背景色
        Color color = Color.rgb(32, 208, 254);
        Color toColor = Color.rgb(74, 142, 254);
        //渐变背景色
        gradualChangeBack(saveBtn, color, toColor);

        //边框
        Color stroke = Color.rgb(68, 130, 254);
        btnBorder(saveBtn, stroke);

        //字体颜色
        Color rgb = Color.rgb(255, 255, 255);
        saveBtn.setTextFill(rgb);

        //字体样式
        Font font = Font.font("仿宋", FontWeight.BOLD, 18);
        saveBtn.setFont(font);

    }

    /**
     * 保存按钮添加事件
     *
     * @param saveBtn 保存按钮
     */
    public static void saveBtnAction(Button saveBtn) {

        //鼠标移入
        SaveBtnMouseAction saveBtnMouseAction = new SaveBtnMouseAction(saveBtn);
        saveBtn.setOnMouseMoved(saveBtnMouseAction);

        //鼠标移出
        SaveBtnExitedAction saveBtnExitedAction = new SaveBtnExitedAction(saveBtn);
        saveBtn.setOnMouseExited(saveBtnExitedAction);
    }

    /**
     * 取消按钮样式
     *
     * @param cancelBtn 取消按钮
     */
    public static void cancelBtn(Button cancelBtn) {

        //背景色
        Color color = Color.rgb(255, 255, 255);
        Color toColor = Color.rgb(221, 221, 221);
        //渐变背景色
        gradualChangeBack(cancelBtn, color, toColor);

        //边框
        Color stroke = Color.rgb(217, 217, 217);
        btnBorder(cancelBtn, stroke);

        //字体颜色
        Color rgb = Color.rgb(71, 71, 71);
        cancelBtn.setTextFill(rgb);

        //字体样式
        Font font = Font.font("仿宋", FontWeight.BOLD, 18);
        cancelBtn.setFont(font);

    }


//    /**
//     * 编辑按钮样式
//     * @param editBtn 编辑按钮
//     */
//    public static void editBtn(Button editBtn){
//
//    }
//
//    /**
//     * 删除按钮样式
//     * @param deleteBtn 删除按钮
//     */
//    public static void deleteBtn(Button deleteBtn){
//
//    }

    /**
     * 取消按钮添加事件
     *
     * @param cancelBtn 取消按钮
     */
    public static void cancelBtnAction(Button cancelBtn) {

        //鼠标移入
        CancelBtnMouseAction cancelBtnMouseAction = new CancelBtnMouseAction(cancelBtn);
        cancelBtn.setOnMouseMoved(cancelBtnMouseAction);

        //鼠标移出
        CancelBtnExitedAction cancelBtnExitedAction = new CancelBtnExitedAction(cancelBtn);
        cancelBtn.setOnMouseExited(cancelBtnExitedAction);
    }


    /**
     * 分页按钮样式
     *
     * @param button 按钮
     * @param color  颜色
     */
    private static void pagingBtnBackground(Button button, Color color) {

        //按钮背景色
        BackgroundFill backgroundFill = new BackgroundFill(color, PAGING_CORNER_RADII, null);
        Background background = new Background(backgroundFill);
        button.setBackground(background);
    }

    /**
     * 添加按钮边框
     *
     * @param button 添加按钮
     */
    private static void addBtnBorder(Button button) {

        //边框
        Color borderCo = Color.rgb(38, 179, 225);
        BorderStroke borderStroke = new BorderStroke(borderCo,
                BorderStrokeStyle.SOLID, CORNER_RADII, new BorderWidths(1));
        Border border = new Border(borderStroke);
        button.setBorder(border);
    }

    /**
     * 添加按钮字体样式（颜色 + 大小）
     *
     * @param button 添加按钮
     */
    private static void addBtnTextColor(Button button) {

        //字体颜色
        Color rgb = Color.rgb(255, 255, 255);
        button.setTextFill(rgb);

        //字体大小
        Font font = Font.font("仿宋", FontWeight.BLACK, 17);
        button.setFont(font);
    }

    /**
     * 分页按钮样式（字体颜色）
     *
     * @param button 按钮
     */
    private static void pagingBtnTextColor(Button button) {

        //字体颜色
        Color rgb = Color.rgb(62, 130, 0);
        button.setTextFill(rgb);

    }

    /**
     * 分页按钮边框
     * 绿色
     *
     * @param button 按钮
     */
    private static void pagingBtnBorder(Button button) {

        //边框
        Color borderCo = Color.rgb(69, 147, 0);
        BorderStroke borderStroke = new BorderStroke(borderCo,
                BorderStrokeStyle.SOLID, PAGING_CORNER_RADII, new BorderWidths(1));
        Border border = new Border(borderStroke);
        button.setBorder(border);
    }

    /**
     * 分页按钮边框
     *
     * @param button 按钮
     */
    private static void pagingBtnBorder(Button button, Color color) {

        //边框
        BorderStroke borderStroke = new BorderStroke(color,
                BorderStrokeStyle.SOLID, PAGING_CORNER_RADII, new BorderWidths(1));
        Border border = new Border(borderStroke);
        button.setBorder(border);
    }

    /**
     * 和新增按钮格式一样颜色不一样
     * @param button
     */
    public static void btn(Button button) {

        //背景色
        Color color = Color.rgb(219, 219, 219);
        Color toColor = Color.rgb(200, 200, 200);
        addBtnBackground(button, color, toColor);

        //字体大小
        Font font = Font.font("仿宋", FontWeight.BLACK, 17);
        button.setFont(font);



    }


}
